
public class Liczba 
{

	private int n=0;
	
	Liczba()
	{
		this.n=0;
	}
	
	Liczba(int n)
	{
		this.n=n;
	}
	
	Liczba(String n, int podstawa) throws LiczbaException
	{
		if(podstawa < 2) throw new LiczbaException("Podstawa nie moze byc mniejsza niż 2");
		if(podstawa > 16) throw new LiczbaException("Podstawa nie moze byc wieksza niż 16");
		char[] c = n.toCharArray();
		//System.out.println(c);
		int [] l = new int[c.length];
		for(int i=0; i<c.length;i++)
		{
			if(!(c[i]=='1' || c[i]=='2' || c[i]=='3' || c[i]=='4' || c[i]=='5' || c[i]=='6' || c[i]=='7' || c[i]=='8' || c[i]=='8' || c[i]=='0' || c[i]=='A' || c[i]=='B' || c[i]=='C' || c[i]=='D' || c[i]=='E' || c[i]=='F')) throw new LiczbaException("Nieprawidlowy format liczby!!");
//przerzucenie tego do tablicy int n[c.length] gdzie każda komórla to podstawa^i*c[I]) gdzie I to C[I] przerobione na liczbę np. F=16 E=15 itd.
		}
		for(int i=0; i<c.length;i++)
		{
			if(c[i]=='0') l[i]=0;
			if(c[i]=='1') l[i]=1;
			if(c[i]=='2') l[i]=2;
			if(c[i]=='3') l[i]=3;
			if(c[i]=='4') l[i]=4;
			if(c[i]=='5') l[i]=5;
			if(c[i]=='6') l[i]=6;
			if(c[i]=='7') l[i]=7;
			if(c[i]=='8') l[i]=8;
			if(c[i]=='9') l[i]=9;
			if(c[i]=='A') l[i]=10;
			if(c[i]=='B') l[i]=11;
			if(c[i]=='C') l[i]=12;
			if(c[i]=='D') l[i]=13;
			if(c[i]=='E') l[i]=14;
			if(c[i]=='F') l[i]=15;
			if(l[i]>=podstawa) throw new LiczbaException("Liczba nie moze być wieksza niz podstawa!!!");
		}
		for(int i=0; i<c.length;i++)
		{
			int wynik=1;
			for(int j=c.length - (1+i);j > 0;j--)
			{ 
				wynik*=podstawa;
			}
			this.n+=wynik*l[i];
		}
	}

	
	public String zapis(int podstawa) throws LiczbaException
	{
		//System.out.print("system " + podstawa + " = ");
		if(podstawa > 16) throw new LiczbaException("Podstawa nie moze być wieksza niz 16");
		if(podstawa < 2) throw new LiczbaException("Podstawa nie moze byc mniejsza niz 2");
		if(podstawa == 10) return  Integer.toString(n);
		else
		{
			int pomoc, liczba = n;
			String reverse = new String();
			while(liczba!=0)
			{
				pomoc=liczba%podstawa;
				liczba/=podstawa;
				if(pomoc==0) reverse+="0";
				if(pomoc==1) reverse+="1";
				if(pomoc==2) reverse+="2";
				if(pomoc==3) reverse+="3";
				if(pomoc==4) reverse+="4";
				if(pomoc==5) reverse+="5";
				if(pomoc==6) reverse+="6";
				if(pomoc==7) reverse+="7";
				if(pomoc==8) reverse+="8";
				if(pomoc==9) reverse+="9";
				if(pomoc==10) reverse+="A";
				if(pomoc==11) reverse+="B";
				if(pomoc==12) reverse+="C";
				if(pomoc==13) reverse+="D";
				if(pomoc==14) reverse+="E";
				if(pomoc==15) reverse+="F";
			}
			String wynik = new StringBuffer(reverse).reverse().toString();
			return wynik;
		}
	}
}


